package br.com.upis.sispat.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.AssociationOverride;
import javax.persistence.AssociationOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@AssociationOverrides({
	@AssociationOverride(name = "pk.patrimonio", joinColumns = @JoinColumn(name = "id_patrimonio")),
	@AssociationOverride(name = "pk.requisicao", joinColumns = @JoinColumn(name = "id_requisicao")),
	@AssociationOverride(name = "pk.usuario", joinColumns = @JoinColumn(name = "id_usuario")) })
@Table(name = "tb_alocacao_patrimonio", schema = "db_sispat")
@Entity
public class AlocacaoPatrimonio implements Serializable {
	
	private static final long serialVersionUID = 4958862725181330931L;

	@EmbeddedId
	private AlocacaoPatrimonioPk pk;
	
	@Column(name = "data_alocacao", nullable = false, scale = 2)
	private Date dataAlocacao;
	
	public AlocacaoPatrimonio() {
		super();
		pk = new AlocacaoPatrimonioPk();
	}

	public AlocacaoPatrimonio(AlocacaoPatrimonioPk pk, Date dataAlocacao) {
		super();
		this.pk = pk;
		this.dataAlocacao = dataAlocacao;
	}

	public static class AlocacaoPatrimonioPk implements Serializable{

		private static final long serialVersionUID = -1815735342466629285L;
		
		@ManyToOne
		@JoinColumn(name = "id_patrimonio", referencedColumnName = "id_patrimonio")
		private Patrimonio patrimonio;

		@ManyToOne
		@JoinColumn(name = "id_usuario", referencedColumnName = "id_usuario")
		private Usuario usuario;
		
		@OneToOne
		@JoinColumn(name = "id_requisicao", referencedColumnName = "id_requisicao")
		private Requisicao requisicao;

		public AlocacaoPatrimonioPk(Patrimonio patrimonio, Usuario usuario, Requisicao requisicao) {
			super();
			this.patrimonio = patrimonio;
			this.usuario = usuario;
			this.requisicao = requisicao;
		}

		public AlocacaoPatrimonioPk() {
			super();
			this.patrimonio = new Patrimonio();
			this.usuario = new Usuario();
			this.requisicao = new Requisicao();
		}

		public Patrimonio getPatrimonio() {
			if(patrimonio==null){
				patrimonio = new Patrimonio();
			}
			return patrimonio;
		}

		public Usuario getUsuario() {
			if(usuario == null){
				usuario = new Usuario();
			}
			return usuario;
		}

		public void setPatrimonio(Patrimonio patrimonio) {
			this.patrimonio = patrimonio;
		}

		public void setUsuario(Usuario usuario) {
			this.usuario = usuario;
		}

		public Requisicao getRequisicao() {
			return requisicao;
		}

		public void setRequisicao(Requisicao requisicao) {
			this.requisicao = requisicao;
		}
		
		
	}
	public AlocacaoPatrimonioPk getPk() {
		return pk;
	}

																																																																																																																																																																																																																																																																																																																																																																																																																																			public void setPk(AlocacaoPatrimonioPk pk) {
		this.pk = pk;
	}

	public Date getDataAlocacao() {
		return dataAlocacao;
	}

	public void setDataAlocacao(Date dataAlocacao) {
		this.dataAlocacao = dataAlocacao;
	}

}
